#ifndef _PACK_H_
#define _PACK_H_

#define MAX_IDX_DESC_SIZE     64
#define MAX_IDX_DESC_HASH     3


/* 用这个来描述多层目录关系, 然后散列到3个DWORD */ 
/* 两个用于校验, 一个用于寻址 */ 
typedef struct  _idx_desc{
    BYTE    type;
    int     ptr;
    BYTE    buf[MAX_IDX_DESC_SIZE];
    DWORD   hash[MAX_IDX_DESC_HASH];
}idx_desc;

void        idx_desc_init( idx_desc* );
idx_desc*   idx_desc_push( idx_desc*, BYTE );
BYTE        idx_desc_pop ( idx_desc* );
BYTE        idx_desc_cur ( int );
DWORD       idx_desc_hash( idx_desc* );


typedef struct _d2p_header{
    BYTE        signature[3];           /* "D2P" */
    BYTE        version;

}d2p_header;

    
/* hash表的存储格式:
 * hash表我准备做成一个主用, 一个备用
 * 如果只有一个的话, 一旦一个有冲突, 后面所有的都需要移动一位
 * 但是如果有个备用的, 因为毕竟冲突的都是少数, 会在冲突附近就解决问题
 * 而且反正一个表项也就16个BYTE, 也多不了多少
 *
 *
 * 或者是在后面补充一块, 因为毕竟发生冲突的会很少很少
 * 在后面留5到10个空白的,用于对付万一冲突
 */
typedef struct _d2p{
    d2p_header  header;
    DWORD      *hash_tbl;
    DWORD      *blk_tbl;
    BYTE       *data;
}d2p;


#endif
